#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <assert.h>
#include <stdlib.h>

//void Reverse(int* arr, int length)
//{
//	assert(arr);
//	int left = 0;
//	int right = length - 1;
//	while (left < right)
//	{
//		int tempt = arr[left];
//		arr[left] = arr[right];
//		arr[right] = tempt;
//		left++;
//		right--;
//	}
//}
//
//void ExchangeA(int* A, int m, int n)
//{
//	assert(A);
//	Reverse(A, m + n);
//	Reverse(A, n);
//	Reverse(A + n, m);
//}
//
//int main()
//{
//	int A[10] = { 1,2,3,1,2,3,4,5 };
//	ExchangeA(A, 3, 5);
//	return 0;
//}

//int MidNumber(int* A, int* B, int n)
//{
//	int i = 0, j = 0, tmp = 0;
//	while (i + j < n)
//	{
//		if (A[i] < B[j])
//			i++;
//		else
//			j++;
//	}
//	return A[i - 1] > B[j - 1] ? A[i - 1] : B[j - 1];
//}
//
//int main()
//{
//	int A[5] = { 11,13,15,17,19 };
//	int B[5] = { 2,4,6,8,20 };
//	int ret = MidNumber(A, B, 5);
//	printf("%d\n", ret);
//	return 0;
//}


int CMP(const void* a,const void* b)
{
	return *(int*)a - *(int*)b;
}

int MainElem(int* A, int n)
{
	int i = 0;
	qsort(A, n, sizeof(int), CMP);
	int count = 1;
	for (i = 0;i < n - 1;i++)
	{
		if (A[i] == A[i + 1])
			count++;
		else
			count = 1;
		if (count > n / 2)
			return A[i];
	}
	return -1;
}

int main()
{
	int A[10] = { 1,9,5,5,6,5,5,3,5,5 };
	printf("%d\n", MainElem(A, 10));
	return 0;
}